import pandas as pd
from sklearn.preprocessing import MinMaxScaler


def modify_column_ad(df, column_index, target_value, replacement):
    """
    将 DataFrame 中指定列中值为特定值的条目替换为指定值。

    Args:
        df (pd.DataFrame): 输入的 DataFrame。
        column_index (int): 要修改的列的索引 (从0开始)。 默认值为3（第四列）。
        target_value (str): 要替换的目标值。 默认值为 "AD"。
        replacement (any): 替换的新值。 默认值为 1。

    Returns:
        pd.DataFrame: 修改后的 DataFrame。
    """
    df.iloc[:, column_index] = df.iloc[:, column_index].replace(target_value, replacement)
    return df


def normalize_column(df, column_index):
    """
    对 DataFrame 中指定列的数据进行归一化 (MinMaxScaler), 并直接覆盖原始列。

    Args:
        df (pd.DataFrame): 输入的 DataFrame。
        column_index (int): 要归一化的列的索引 (从0开始)。默认值为4（第五列）。

    Returns:
        pd.DataFrame: 修改后的 DataFrame，归一化后的数据将覆盖原始数据。
    """
    column_to_normalize = df.iloc[:, column_index].values.reshape(-1, 1)
    scaler = MinMaxScaler()
    normalized_column = scaler.fit_transform(column_to_normalize)
    df.iloc[:, column_index] = normalized_column.flatten()  # 直接覆盖原始列
    return df


def calculate_column7_proportions(csv_file):
    """
    计算满足特定条件的csv文件中第7列各值占比 (无异常处理)。

    Args:
        csv_file (str): CSV 文件路径。

    Returns:
        dict: 一个字典，键是第7列的取值，值是对应的占比。
              如果符合条件的行数为0，则返回空字典。
    """
    df = pd.read_csv(csv_file)

    # 找到第4列或第5列值为1的行
    filtered_df = df[(df.iloc[:, 20] == 1) | (df.iloc[:, 21] == 1)]

    if filtered_df.empty:
        return {}

    # 计算第7列各值的计数
    value_counts = filtered_df.iloc[:, 43].value_counts()

    # 计算占比
    proportions = value_counts / len(filtered_df)

    return proportions.to_dict()

if __name__ == '__main__':

    # 读取 CSV 文件
    df = pd.read_csv("Wimbledon_featured_matches.csv")

    # 1. 修改
    df_modified = modify_column_ad(df, 24, "F", 0)
    df_modified = modify_column_ad(df_modified, 24, "B", 1)
    df_modified = modify_column_ad(df_modified, 44, "NCTL", 0)
    df_modified = modify_column_ad(df_modified, 44, "CTL", 1)

    # 2. 归一化
    normalized_df = normalize_column(df_modified, 39)
    normalized_df = normalize_column(normalized_df, 40)
    normalized_df = normalize_column(normalized_df, 41)
    normalized_df = normalize_column(normalized_df, 42)

    #df_modified.to_csv("modified_example_已处理（除了发球范围）.csv", index=False)

    csv_file_path = 'Wimbledon_featured_matches.csv'

    proportions = calculate_column7_proportions(csv_file_path)

    if proportions:
        print("第44列各值的占比:")
        for value, proportion in proportions.items():
            print(f"{value}: {proportion:.4f}")